package com.example.demo.controller;

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.messaging.simp.annotation.SendToUser;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

/**
 *   1.MessageMapping
        Spring对于WebSocket封装的特别简单，提供了一个@MessageMapping注解，功能类似@RequestMapping，它是存在于Controller中的，定义一个消息的基本请求，功能也跟@RequestMapping类似，包括支持通配符``的url定义等等，详细用法参见Annotation Message Handling
     2.SimpMessagingTemplate
        SimpMessagingTemplate是Spring-WebSocket内置的一个消息发送工具，可以将消息发送到指定的客户端。

     作者：Devid
     链接：http://www.jianshu.com/p/60799f1356c5
     來源：简书
     著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
@Controller
public class TestController {

    @Resource
    private SimpMessagingTemplate simpMessagingTemplate;

    @RequestMapping("/index")
    public void index(){}


//    @MessageMapping("/publish-notice")      //这个方法是接收客户端发布公告的WebSocket请求
//    public void greeting(String value) {
//        /*
//         * Convert the given Object to serialized form, possibly using a MessageConverter,
//         * wrap it as a message and send it to the given destination.
//         */
//        simpMessagingTemplate.convertAndSend("/client/notice", value);
//
//        /*
//         * 前面我们全局配置中指定了服务端接收的连接以 app大头，
//         * 所以客户端发送公告的请求连接应该是/app/publish-notice。
//         */
//    }


    /**
        @SendTo 定义了消息的目的地。
            结合例子解释就是“接收/app/change-notice发来的value，
            然后将value转发到/topic/notice客户端。
        /topic/notice是客户端发起连接后，订阅服务端消息时指定的一个地址，
            用于接收服务端的返回，后面我们在写客户端代码的时候会看见。
     *
     */
    @MessageMapping("/publish-notice")
    @SendTo("/client/notice")
    @SendToUser
    public String greeting2(String value) {
        return value;
    }

}
